import os
import shutil
import random


def random_copy_files(s_dir, d_dir, n_files, ftype):
    # 检查源文件夹是否存在
    if not os.path.exists(s_dir):
        print(f"Error: Source directory '{s_dir}' does not exist.")
        return

        # 检查目标文件夹是否存在，如果不存在则创建
    if not os.path.exists(d_dir):
        os.makedirs(d_dir)

        # 获取源文件夹中符合给定类型的文件列表
    file_list = [os.path.join(s_dir, f) for f in os.listdir(s_dir) if f.endswith(ftype)]

    # 获取文件数量
    fnum = len(file_list)

    # 如果找到的文件数量小于或等于需要复制的数量，则复制所有文件
    if fnum <= n_files:
        for file in file_list:
            shutil.copy2(file, d_dir)  # copy2 保留文件元数据
    else:
        # 随机选择需要复制的文件
        selected_files = random.sample(file_list, n_files)
        # 复制选定的文件
        for file in selected_files:
            shutil.copy2(file, d_dir)  # 如果目标文件夹中存在同名文件，则会被覆盖


# 调用函数
source_dir = 'path_to_source_directory'  # 替换为实际的源文件夹路径
destination_dir = 'path_to_destination_directory'  # 替换为实际的目标文件夹路径
number_of_files = 5
file_type = '.*'
random_copy_files(source_dir, destination_dir, number_of_files, file_type)